МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
З В І Т
До лабораторної роботи №6
з курсу: «Програмування комп’ютерної графіки»
на тему: «Побудова рухомих зображень»
Варіант №9
Мета роботи - набути практичних навиків в складанні програм для побудови зображень на екрані комп’ютера за допомогою засобів мови С# та бібліотеки OpenGL.
Завдання:
Створити на екрані комп’ютера графічне вікно і сформувати в ньому рухоме зображення. Вікно розмістити в верхньому правому куті екрану. Навести межі вікна. Параметри рухомого зображення визначені в таблиці 3. Параметри зображення задані в пікселах. Варіант завдання визначає викладач. Графік і вікно з рухомим зображенням повинні бути присутні на екрані одночасно, причому вікно не має перекривати графік (рис.1).
№ варіанту
Структура зображення
Пояснення
9
Замальований восьмикутник котиться по видимому круговому подібному контуру. Зміна центрів обертання в точці А. Діаметр вписаного у восьмикутник кола та відстань між колами становить a. Радіуси кіл становлять R. Кольори восьмикутника і контуру різні.
Параметри : a=20, R=80
Текст програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
OnGl.InitializeContexts();
}
private void OnGl_Load(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
Gl.glClearColor(255, 255, 255, 1);
Gl.glViewport(0, 0, OnGl.Width, OnGl.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
if ((float)OnGl.Width <= (float)OnGl.Height)
{
Glu.gluOrtho2D(0.0, 25.0 * (float)OnGl.Height / (float)OnGl.Width, 0.0, 25.0);
}
else
{
Glu.gluOrtho2D(0.0, 20.0 * (float)OnGl.Width / (float)OnGl.Height, 0.0, 20.0);
}
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
}
private void button1_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0.3f, 0.5f, 0.3f);
Gl.glBegin(Gl.GL_POINTS);
Gl.glEnd();
Gl.glFlush();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_POINTS);
Gl.glEnd();
Gl.glEnable(Gl.GL_POINT_SMOOTH);
Gl.glPointSize(4);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2d(5, 5);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 5);
Gl.glEnd();
Gl.glDisable(Gl.GL_POINT_SMOOTH);
}
private void button3_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0.6f, 0.3f, 0.2f);
Gl.glEnable(Gl.GL_LINE_SMOOTH);
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glEnd();
Gl.glFlush();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glEnd();
Gl.glEnable(Gl.GL_LINE_STIPPLE);
Gl.glLineWidth(3);
Gl.glLineStipple(1, 58360);
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glVertex2d(5, 5);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 5);
Gl.glVertex2d(...